// PROGRAMA : SCRP142A
// SISTEMA : SISP - SISTEMA DE INFORMACOES DE SEGURANCA PUBLICA
// IDENTIFICACAO CRIMINAL
// BIBLIOTECA : SISP
// CLIENTE : GEJUSPC - GERENCIA DE ESTADO DA JUSTICA, SEGURANCA
// PUBLICA E CIDADANIA / INSTITUTO DE IDENT.
// OBJETIVO : RELATORIO DAS FICHAS DE INDICE CRMINAL
// PROGRAMADOR: JOSE ANTONIO COELHO
// DATA : 11 DE SETEMBRO DE 1997
// ALTERACAO : 14/06/1999 POR SOLON MIRANDA
// ATUALIZACAO: PESQUISA PELOS CAMPOS JA FONETIZADOS: NOME COMPLETO,
// : NOME DA MAE, NOME DO PAI E ALCUNHAS(4).
// RESPONSAVEL: CARLOS HENRIQUE DATA: 20/11/1998.
package br.com.vti.sisp_sicrim.antigo.controller.programa;

import java.util.Arrays;

import br.com.caelum.vraptor.Post;
import br.com.caelum.vraptor.Path;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
import br.com.vti.sisp_sicrim.antigo.controller.tela.Scrm1110;
import br.com.vti.sisp_sicrim.antigo.controller.tela.Scrm111a;
import br.com.vti.sisp_sicrim.antigo.model.SicCadastro;
import br.com.vti.sisp_sicrim.antigo.model.SicSenha;
import br.com.vti.sisp_sicrim.antigo.util.ExceptionProgram;
import br.com.vti.sisp_sicrim.antigo.util.Scrg001;
import br.com.vti.sisp_sicrim.antigo.util.Sessao;
import br.com.vti.sisp_sicrim.antigo.util.UtilBean;

/**
 * Classe : Delnom OBJETIVO : RELATORIO DAS FICHAS DE INDICE CRMINAL *
 * 
 * @author Incode - Data: mai/2014
 * 
 */
@Resource
@Path("/antigo/delnom")
public class Delnom {
	// Views utilizadas
	SicCadastro criminalView = new SicCadastro();
	SicSenha senhaView = new SicSenha();
	// Telas/relatorios utilizados
	Scrm1110 scrm1110;
	Scrm111a scrm111a;
	// Includes utilizados
	// Areas globais / session
	Scrg001 scrg001;
	// Funcoes/subrotinas
	FuncoesGerais funcoes = new FuncoesGerais();
	Result result;
	Sessao sessao;
	Boolean primeiraVez = false;
	Delnom delnomAnterior;
	String faseproc = "0";

	private int jDataIni = 0;
	private int jDataFim = 0;
	private long jReg_geral = 0;
	private String jNomeCompletoPhon = "";
	private String jMaePhon = "";
	private String jPaiPhon = "";
	private String[] jAlcunhaPhon = new String[5];
	private int jData_nasc = 0;
	private String jMaeLimpa = "";
	private int jDataDig = 0;
	private int jI1 = 0;

	// private int dataCorrente = 0;
	private Scrm1110 preMapas() {
		scrm1110 = new Scrm1110(true, sessao);
		scrm111a = new Scrm111a(true, sessao);
		Arrays.fill(jAlcunhaPhon, 0);
		scrm1110.setJalcunha(new String[5]);
		scrm111a.setJalcunha(new String[5]);
		scrm1110.setJobservacoes(new String[5]);
		scrm111a.setJobservacoes(new String[5]);
		scrm1110.setDataCorrente(UtilBean.obtemDataDia());
		scrm1110.setDataCorrente(UtilBean.obtemDataDia());
		// RELATORIO

		sessao.getScrg001().setWProgramaw(this.getClass().getSimpleName());
		sessao.getScrg001().setWFuncaow("CONSULTA");
		return scrm1110;
	}

	public Delnom(Result result, Sessao sessao) {
		this.result = result;
		this.sessao = sessao;
	}

	@Post
	public void executar(Scrm1110 scrm1110, Scrm111a scrm111a) {
		try {
			main(scrm1110, scrm111a);
		} catch (Exception e) {
			throw new ExceptionProgram(e, sessao, this.getClass().getSimpleName());
		}
	}

	private void main(Scrm1110 pscrm1110, Scrm111a pscrm111a) throws Exception {
		if (pscrm1110 == null && pscrm111a == null) {
			primeiraVez = true;
			// scrm1110 = new Scrm1110 (primeiraVez);
			scrm1110 = preMapas();
			scrm1110.setNavegar("../delnom/executar");
			result.include("scrm1110", scrm1110);
			sessao.setAtributo("DELNOM", this);
			scrm1110.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
			return;
		} else {
			restaurarEstados(pscrm1110, pscrm111a);
		}

		if (pscrm1110 != null) {
			scrm1110.receberTela(false, result);
		}
		if (UtilBean.funcao.equals(UtilBean.ctt_retorna))
		// FETCH 'SCRP1400'
		{
			Scrp140a scrp140a = new Scrp140a(result, sessao);
			scrp140a.executar(null, null, null, null);
			// PROGRAMA COM PESQUISA FONETICA
			return;
		}
		if (scrm111a.getJmae().equals("************")) {
			jMaeLimpa = "";
		} else {
			jMaeLimpa = scrm111a.getJmae();
		}
		if (scrm111a.getJregGeral() == 0 && scrm111a.getJnomecompleto().trim().equals("") && scrm111a.getJmae().trim().equals("") && scrm111a.getJpai().trim().equals("") && (!(!scrm1110.alcunhaVazio()))) {
			scrm1110.enviarMensagem(null, "NENHUM CAMPO FOI INFORMADO - P/ RETORNAR TECLE PF3");
			return;
		}
		if (scrm111a.getJregGeral() != 0) {
			pesquisaRegGeral(pscrm111a);
		} else {
			fonetizaCampos();
			pesquisaFonetica();
		}
		sessao.setAtributo("DELNOM", this);
		result.include("scrm1110", scrm1110);
		scrm1110.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
	}

	private void pesquisaRegGeral(Scrm111a pscrm111a) {
		// Par�grafo: fd1()
		while (criminalView.pesquisaRegEstadualGeralStatusRegDifer(jReg_geral, 5)) {
			scrm1110.setJregGeral(criminalView.getRegEstadualGeral());
			scrm111a.setJnomecompleto(criminalView.getNomeCompleto());
			scrm111a.setJmae(criminalView.getNomeMae());
			jData_nasc = criminalView.getDataNasc();
			scrm111a.setJpai(criminalView.getNomePai());
			scrm111a.setJalcunha(criminalView.getApelidoAlcunhas());
			scrm111a.setJnatural(criminalView.getNaturalidade());
			scrm1110.setJcodmunnascimento(criminalView.getCodigoMunicipioNasc());
			scrm111a.setJufnascimento(criminalView.getUfNaturalidade());
			scrm111a.setJocorrencia(1);
			scrm1110.setJobservacoes(criminalView.getObservacao());
			jDataDig = criminalView.getDataDocAtu();
			scrm111a.setJmatricula(criminalView.getMatriculaFuncAtu());
			scrm111a.setJhorario(criminalView.getHoraAtu());
			jDataIni = jDataDig;
			// Par�grafo: fd2()
			senhaView.consultaMatricula(scrm111a.getJmatricula());

			scrm111a.setJnomedigitador(senhaView.getNome());

			if (!scrm111a.getEnviada()) {
				result.include("scrm111a", scrm111a);
				sessao.setAtributo("DELNOM", this);
				scrm111a.enviarTela(false, result, getClass().getSimpleName().toUpperCase());
				return;
			}
			if (pscrm111a != null) {
				scrm111a.receberTela(false, result);
			}
			if (UtilBean.funcao.equals(UtilBean.ctt_retorna))
			// FETCH 'SCRP1400'
			{
				Scrp140a scrp140a = new Scrp140a(result, sessao);
				scrp140a.executar(null, null, null, null);
				return;
			}
			// PROGRAMA COM PESQUISA FONETICA
			if (senhaView.fimDados()) {
				Scrp142a scrp142a = new Scrp142a(result, sessao);
				scrp142a.executar(null);
				return;
			}

		}
		if (criminalView.registrosProcessados() == 0) {
			erroPesquisa();
		}
	}

	private void pesquisaFonetica() {
		// Par�grafo: fd3()
		while (criminalView.pesquisaNomeCompletoPhonNomeMaePhonNomePaiPhonApelidoAlcunhasPhonStatusRegDifer(jNomeCompletoPhon, jMaePhon, jPaiPhon, jAlcunhaPhon[1], jAlcunhaPhon[2], jAlcunhaPhon[3], jAlcunhaPhon[4], 5)) {
			// 257
			scrm1110.setJregGeral(criminalView.getRegEstadualGeral());
			scrm1110.setJregGeral(46126);
			scrm111a.setJnomecompleto(criminalView.getNomeCompleto());
			scrm111a.setJmae(criminalView.getNomeMae());
			jData_nasc = criminalView.getDataNasc();
			scrm111a.setJpai(criminalView.getNomePai());
			scrm111a.setJalcunha(criminalView.getApelidoAlcunhas());
			scrm111a.setJnatural(criminalView.getNaturalidade());
			scrm1110.setJcodmunnascimento(criminalView.getCodigoMunicipioNasc());
			scrm111a.setJufnascimento(criminalView.getUfNaturalidade());
			scrm111a.setJocorrencia(1);
			scrm1110.setJobservacoes(criminalView.getObservacao());
			jDataDig = criminalView.getDataDocAtu();
			scrm111a.setJmatricula(criminalView.getMatriculaFuncAtu());
			scrm111a.setJhorario(criminalView.getHoraAtu());
			jDataIni = jDataDig;
			criminalView.setRegEstadualGeral(46126L);
			criminalView.setStatusReg(5);
			criminalView.setTipoReg("EX");
			criminalView.atualiza();
			// dao.commit();
			// dao.rollback();
			// Par�grafo: fd4()
			senhaView.consultaMatricula(scrm111a.getJmatricula());

			scrm111a.setJnomedigitador(senhaView.getNome());

			scrm111a.receberTela(false, result);
			if (UtilBean.funcao.equals(UtilBean.ctt_retorna))
			// FETCH 'SCRP1400'
			{
				Scrp140a scrp140a = new Scrp140a(result, sessao);
				scrp140a.executar(null, null, null, null);
				return;
			}
			// PROGRAMA COM PESQUISA FONETICA
			if (senhaView.fimDados()) {
				Scrp142a scrp142a = new Scrp142a(result, sessao);
				scrp142a.executar(null);
				return;
			}

		}
		if (criminalView.registrosProcessados() == 0) {
			erroPesquisa();
		}
	}

	private void fonetizaCampos() {
		if (!scrm111a.getJnomecompleto().trim().equals("")) {

			funcoes.phonNome = scrm111a.getJnomecompleto();
			// Phonet phonet = new Phonet ();
			funcoes.phonet(funcoes.phonArea);

			jNomeCompletoPhon = funcoes.phonCod;
		}
		if (!scrm111a.getJmae().trim().equals("")) {

			funcoes.phonNome = scrm111a.getJmae();
			// Phonet phonet = new Phonet ();
			funcoes.phonet(funcoes.phonArea);

			jMaePhon = funcoes.phonCod;
		}
		if (!scrm111a.getJpai().trim().equals("")) {

			funcoes.phonNome = scrm111a.getJpai();
			// Phonet phonet = new Phonet ();
			funcoes.phonet(funcoes.phonArea);

			jPaiPhon = funcoes.phonCod;
		}
		for (jI1 = 1; jI1 <= 4; jI1++) {
			if (!scrm1110.getJalcunha(jI1).trim().equals("")) {

				funcoes.phonNome = scrm111a.getJalcunha(jI1);
				// Phonet phonet = new Phonet ();
				funcoes.phonet(funcoes.phonArea);

				jAlcunhaPhon[jI1] = funcoes.phonCod;
			}
		}
	}

	private void erroPesquisa() {

		Scrp142a scrp142a = new Scrp142a(result, sessao);
		scrp142a.setMensagem("                   NENHUMA FICHA CRIMINAL FOI ENCONTRADA");
		scrp142a.executar(null);
	}

	private void restaurarEstados(Scrm1110 pscrm1110, Scrm111a pscrm111a) {
		this.delnomAnterior = (Delnom) sessao.getAtributo("DELNOM");
		if (pscrm1110 != null) {
			scrm1110 = pscrm1110;
		} else {
			scrm1110 = this.delnomAnterior.scrm1110;
		}
		scrm1110.setSessao(sessao);
		if (pscrm111a != null) {
			scrm111a = pscrm111a;
		} else {
			scrm111a = this.delnomAnterior.scrm111a;
		}
		scrm111a.setSessao(sessao);
		this.faseproc = this.delnomAnterior.faseproc;
	}
}
